﻿/**************************************************************
 *
 * 唯一标识：cbe39b13-a175-4bae-a204-1e45bcf319b4
 * 命名空间：Sgr.Generator.Segment.Entities
 * 创建时间：2024/6/17 14:50:10
 * 机器名称：DESKTOP-HJ4OAG9
 * 创建者：CocoYuan
 * 电子邮箱：fengqinhua2016@163.com
 * 描述：
 *
 **************************************************************/

using Sgr.Domain.Entities;

namespace Sgr.Generator.Segment.Entities
{
    /// <summary>
    /// 基于标识的Id分段信息实体
    /// </summary>
    public class SegmentEntity : IEntity<string>
    {
        /// <summary>
        /// 获取或设置实体的唯一标识
        /// </summary>
        /// <remarks>
        /// 作为分段标识的业务关键字，用于区分不同的业务场景
        /// </remarks>
        public string Id { get; set; } = "";

        /// <summary>
        /// 获取或设置当前号段的最大可用ID值
        /// </summary>
        /// <remarks>
        /// 表示当前号段中可分配的最大ID值，新分配的ID不能超过此值
        /// </remarks>
        public long MaxId { get; set; } = 1;

        /// <summary>
        /// 获取或设置号段步长 [ 该字段是步长的初始值，写入后不会随着字段消耗的快满而改变 ]
        /// </summary>
        /// <remarks>
        /// 每次获取新号段时，MaxId增加的值。这决定了每个号段可以分配的ID数量
        /// </remarks>
        public int Step { get; set; }

        /// <summary>
        /// 获取或设置分段信息的描述
        /// </summary>
        /// <remarks>
        /// 用于记录该号段的用途说明或其他备注信息
        /// </remarks>
        public string Description { get; set; } = "";

        /// <summary>
        /// 检查此实体是否是临时的（未持久化到数据库）
        /// </summary>
        /// <returns>
        /// 如果实体ID为空，则返回true，表示实体尚未持久化；否则返回false
        /// </returns>
        public bool IsTransient()
        {
            return string.IsNullOrEmpty(Id);
        }
    }
}